#include "queue_array.h"
#include <stdio.h>
#include <stdlib.h>
 
/**
 * ************************************************ 
 * @brief   初始化队列
 * @param   q               Param...
 */
void initQueue(ArrayQueue *q)
{
    q->front = 0;
    q->rear = -1;
    q->size = 0;
}
/**
 * ************************************************ 
 * @brief   判断队列是否为空
 * @param   q               Param...
 * @return int
 * ************************************************ 
 */
int isEmpty(ArrayQueue *q)
{
    return q->size == 0;
}
/**
 * ************************************************ 
 * @brief   判断队列是否已满
 * @param   q               Param...
 * @return int
 * ************************************************ 
 */
int isFull(ArrayQueue *q)
{
    return q->size == MAX_SIZE;
}
/**
 * ************************************************ 
 * @brief   入队操作
 * @param   q               Param...
 * @param   value           Param...
 */
void enqueue(ArrayQueue *q, int value)
{
    if (isFull(q))
    {
        return;
    }
    q->rear = (q->rear + 1) % MAX_SIZE;
    q->data[q->rear] = value;
    q->size++;
}
/**
 * ************************************************ 
 * @brief   出队操作
 * @param   q               Param...
 * @return int
 * ************************************************ 
 */
int dequeue(ArrayQueue *q)
{
    if (isEmpty(q))
    {
        return -1;
    }
    int tmp = q->data[q->front];
    q->front = (q->front + 1) % MAX_SIZE;
    q->size--;
    return tmp;
}
/**
 * ************************************************ 
 * @brief Get the Queue Size object
 * @param   q               Param...
 * @return int
 * ************************************************ 
 */
int getQueueSize(ArrayQueue *q)
{
    return q->size;
}
 
/**
 * ************************************************ 
 * @brief   遍历打印队内元素
 * @param   q               Param...
 */
void printQueue(ArrayQueue *q)
{
    if (isEmpty(q))
    {
        return;
    }
    int i = q->front;
    for (int j = 0; j < q->size; j++)
    {
        // printf("%d ", q->data[i]);
        i = (i + 1) % MAX_SIZE;
    }
}
 
/****************************************2025-11-25****************************************/